23

» WarCraft 3 / Функция Анимации

Похожие вопросы:

ответ
Я так и не понял чем была вызвана эта проблема, но точно не из-за бокса. Скорее из-за камеры. Поставил вейт перед проигрыванием анимации и всё решилось.
ответ
Ошибка при работе с MdlVis. Попробуй открыть модель в версии 1.40, там должно изменение видимости в ключевых кадрах должно заработать. Однако советую сделать копию модели, т.к. 1.40, если не изменяет память, ломает уже настроенную видимость.
ответ
~8gabriel8:
Ключевые кадры - КК обозначены на шкале анимации синим, если ты попал в этот кадр, то его номер справа из чёрного станет столь же синим. Например, анимация длится 2000 кадров, от 1000 до 3000 на шкале, а охота сократить её вдвое, для этого просто посчитаю новую позицию КК. Пусть после начального следующий КК стоит на месте 1333, потом 1500 и так далее; для определения позиции вычитаю 1000, делю примерно на два, прибавляю 1000, так первый кадр должен сместиться с 1333 на 1167; попадаю на шкале в 1333, нажимаю C или Ctrl+C, перехожу на 1167 и нажимаю Ctrl+V, а потом убираю кадр на 1333, что можно сделать, попав в него и нажав Del, либо выделив участок с ним и в меню по правой клавише нажав Очистить. Не помню точно, но с выделением на шкале есть какие-то особенности, либо там тянуть выделение надо не левой кнопкой мыши, а правой, либо не всегда срабатывает с первого раза, либо с начала шкалы или до конца не выделяется, в любом случае можешь просто щёлкнуть в одно место, зажать Shift и щёлкнуть во второе место для выделения. Далее 1500 нужно перенести на 1250, всё опять повторяешь. И так до конца шкалы. Потом длительности анимации указываешь не с 1000 до 3000, а с 1000 до 2000.
Как вариант, можно не менять длительность анимации, а сдвинуть пораньше КК, где юнит наносит урон, типа замах укоротить.
P. S. Сначала было очень неудобно это выполнять, но после смещения нескольких шкал анимаций стало получаться весьма шустро. Только нужно постоянно быть внимательным, чтобы не сбиться в расчётах нового местоположения КК, и помнить, чтобы не удалять КК на старом месте раньше установки на новое, а ещё, что C или Ctrl+C были точно нажаты для этого кадра, а не остались от предыдущего)
ответ
Nemezid:
DarkLigthing, что-то не выходит. Пробую в reforged, если что
Вот карта пример, здание будет постепенно возвращаться к началу строительства. (Reforged)
ответ
call SetUnitFlyHeight( unit, 0, 600 ) посадит за одну секунду юнита на землю при условии что его высота равна 600, ничего сложного, проверь ро как указал комментатор выше

23

» WarCraft 3 / Задержка анимации способности

Похожие вопросы:

ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Проверь модель. Возможно анимация death проигрывает выстрел.
Кстати если её правильно поправить, то тебе и вейт не нужен будет. Сразу DestroyEffect()
ответ
EviLInside, скоро (после конкурса) выложу отдельной системой там очень всё просто будет, контр С контр В, и вызываем когда нужно, но там много нюансов:
  1. Каст тайм юниту по нулям в РО
  2. Касттайм у способностей канальных в РО по нулям
  3. Паузим юнита через новую паузу рефордж патча
  4. Визуально получаем примерно вот это
Смотри туда где написано "подготовка", там 0.4 и 0.2 секунды, и правильный код который подгоняет анимации
Я эту систему уже улучшил и она более гладкая нужна вообще для других вещей, чаще для поддреживаемых заклинаний, например Бураноподобных
Получается примерно как в Доте2, надо бар только кастомизировать нормально.
ответ
Чтобы узнать кото ударили сплешем, оттолкнуть и уронить нужно:
  1. Отловить урон
  2. Оттолкнуть юнитов
  3. Воспроизвести анимацию по индексу

23

» WarCraft 3 / крафт

Похожие вопросы:

ответ
Делаешь способность пустышку на основе "Канал", далее делаешь триггер с событием "Юнит начал направлять способность" в условиях ставишь
свою способность, а в действиях условиями на наличие предметов делаешь крафт. Всё что я тут написал - это отсылка к темам которые можно самому найти.
ответ
компилирует war3map.j какой-то утилитой в составе JNGP
JassHelper эта утилита, её можно через PowerShell отдельно от JNGP запускать.
Так-то можно даже просто pjass.exe (тоже в составе JNGP) запустить (через PowerShell), ведь в war3map.j код уже в JASS.

БОльшая часть строк находится в war3map.wts, его и нужно переводить, там находятся все описания способностей, юнитов, предметов и так далее, иногда даже просто мусор, который редактор забыл убрать.
Дам совет, у способностей нужно переводить только описания, имена в самой игре всё равно не отображаются. А ещё на них может быть завязан код (как у меня в карте), так что лучше их вообще не трогать.
С юнитами и предметами возможна такая же ситуация, но вот тут сложнее, ведь их имена отображаются в игре.
Потому перед переводом, нужно проверить war3map.j на наличие функций GetObjectName, GetItemName, GetUnitName. Если они есть, то понять, для чего они используются, а потом уже переводить.
Часть строк может быть в war3map.j, многие и переводить не нужно (пути к эффектам, например), но вот выводимые на экран сообщения перевести стоит.
ответ
В чем проблема написать функцию подсчета итемов по их Id (циклом делается), а уже там делать условие. Не знаю уровень автора, поэтому напишу псевдокодом
Если КоличествоПредметов(u,'I000') >= 2 Тогда
	УдалитьИтем(u,'I000')
	УдалитьИтем(u,'I000')
	ДатьИтемЮниту(u,'I001')
КонецЕсли
u - юнит, с которым работаешь
ответ
В условии поставь "И" функцию где надо мясо и 20 дерева(объедение эти 2 условия , а то жарится за халявные 20 дерева). Ну для крафта используй систему зарядов на предметах или считай их количество через условие в инвентаре, на подобии триггер с " жаркой мяса".

Вот готовку на костре починил и сделал крафт в кузне из железа и кожи.

23

» WarCraft 3 / Внимание вопрос

Похожие вопросы:

ответ
Сделай тогда так:
code
function Trig_SomeFunction_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'SomeSpell' then
        call SomeAction
    endif
    return false
endfunction 

//=========
function InitTrig_SomeFunction takes nothing returns nothing
    set gg_trg_SomeFunction = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_SomeFunction, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_SomeFunction, Condition( function Trig_SomeFunction_Conditions ) )
endfunction
Ты сделаешь проверку в условии и там же запустишь функцию, без лишнего вызова Trig_SomeFunction_Actions . Но это почти одно и то же, что и второй вариант.
Что-то я не понял, что ты подразумеваешь под "порядком" Несколько условий?

Если у тебя несколько условий, то делай градацию, начиная с самого распространенного
code
function Trig_SomeFunction_Conditions takes nothing returns boolean
    if GetSpellAbilityId() == 'SomeSpell' then // Самое распространенное
    if GetUnitState(GetTriggerUnit()) > 100.0 then // Менее распространенное
    if ... then // И т.д. в порядке уменьшения вероятности несрабатывания
        call SomeAction
    endif
    endif
    ....
    return false
endfunction 

//=========
function InitTrig_SomeFunction takes nothing returns nothing
    set gg_trg_SomeFunction = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_SomeFunction, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_SomeFunction, Condition( function Trig_SomeFunction_Conditions ) )
endfunction
ответ
Один ресурс - один вопрос, читайте правила сайта.
ответ
фатал после игры может быть вызван
а) использованием malloc
б) копированием внутриигровых структур (например, структуру сплеша перенес от одного юнита другому, при чистке один раз адрес зачистился, а на втором проходе произошел краш)
в) неизвестным мне образом
ответ
Еще раз, 'Aams' - щит от магии, он дает маг имун и только. 'Aam2' - нейтрализует урон от магии, при этом в цель можно применять заклинания, обрати внимание там другой бафф.
ответ
описанная проблема это движок вара, а не ии. ничего с этим не сделать, на каждого игрока существует лимит юнитов которые нормально управляются, после идут статтеры

23

» WarCraft 3 / Нестандартный оплетеный рудник

Похожие вопросы:

ответ
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
  1. Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
  2. Можно от даммика развеяние нежити за 0.01 сек.
  3. Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
ответ
XGM Bot:
Похожие вопросы:

ответ
оплетение рудника происходит методом замены объекта рудника на объект оплетённого рудника, никто не запрещает делать это вручную.
ответ
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
  1. Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
  2. Можно от даммика развеяние нежити за 0.01 сек.
  3. Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
ответ
Ikobot:
Можно сделать способность на основе "превращения в зомби" с передачей контроля игроку. И сделать дамми работников, которые будут в невидимости таскать золото, в зависимости от кол-во рабов на борту рудника.
Можно сделать невидимое "Древо Жизни" которое привязано к зданию и живет до тех пор, пока живет главное здание, главное связать здания триггерно.
Я придумал закинуть пустить корни в книгу заклинаний и заблокировал ее, в вобщем оплетение работает, сейчас другая проблема в другом вопросе))


23

» Администрация XGM / Ресурс вместо главной проекта

Похожие вопросы:

ответ
В данный момент нет планов на такие изменения, до большого обновления кодовой базы. Откладывается на неопределенное время.

23

» WarCraft 3 / Как удалить всех юнитов у бота?

Похожие вопросы:

ответ
>>В не правильно условий удаления?
Возможно идёт перезапись переменных, из-за чего не всё удаляется.
Актуально с глобалками
Смотрите в сторону мультиплеерности.
Если в ваших тестах с одним героем всё хорошо, то не факт что всё будет хорошо, если одновременно кастанутся 2 одинаковых спелла, которые построены на одних и тех же переменных.

23

» WarCraft 3 / Помогите сделать способность

Похожие вопросы:

ответ
Хештаблица в помощь
ответ
E: Unit starts the effect of an ability.
C: Ability being cast =
A: Set Casting unit Life to (Life of Casting unit + 200).
Вот скрин настройки действия.
ответ
Аура не сразу вешается на юнита, нужна задержка.
ответ
Собственные попытки в студию, что не получается?
Напомним - ЭТО НЕ СТОЛ ЗАКАЗОВ, здесь задают вопросы про реализацию тех или иных вопросов, спрашивают про ошибки, оптмизацию, отдельные функции. Я не увидел в вашем вопросе ничего кроме невнятного описания механики способности, " вокргу кого то там огненные столбы возникают, и еще порча"...
ответ
Хотел было написать словами, но понял, что это будет дольше, чем сделать самому.
PS: тут GUI, указывайте в описании вопроса, как надо делать.

23

» WarCraft 3 / Таймер

Похожие вопросы:

ответ
Происходящее здесь напомнило мне один случай из моего далекого прошлого. В те времена я еще только начинал осваивать редактор. Одна из тем, которая меня заинтересовала и по которой мне не удалось найти достаточно полной информации - утечки. Тогда я пошел на один форум и задал простой вопрос о том, как определить наличие и степень серьезности утечек в карте, не перебирая весь код. В результате я получил тонну флуда и "ответ от профи", с которым все в итоге согласились - фрагмент кода с ценным указанием "если это число растет быстро - утечек много, если медленно - мало или нет вовсе". Код представлял из себя таймер с малым периодом, который создавал объект, брал его хендл, писал в чат и удалял объект, но был один нюанс - создаваемый объект утекал на каждой итерации таймера.
ответ
Ну с таймером я хз, проверял раз 10 карту, никаких проблем не было, по поводу тренировочного лагеря, если без костылей, тут нужна хэш-таблица, а её я могу юзать только через код
код
define{void = nothing; int = integer; bool = boolean}
library mylib initializer init{
    private trigger trg = CreateTrigger()
    private hashtable H = InitHashtable()
    
    private void act(){
        unit u = GetEventDamageSource(); int i = GetHandleId(u), c = LoadInteger(H,i,0)+1
        texttag tt = CreateTextTag()
        
        SetTextTagText(tt,I2S(c)+"/3",.0276)
        SetTextTagPosUnit(tt,u,0)
        SetTextTagColor(tt,255,0,255,0)
        SetTextTagVelocity(tt,.05325*Cos(1.570788),.05325*Sin(1.570788))
        SetTextTagPermanent(tt,false)
        SetTextTagLifespan(tt,1.)
        SetTextTagFadepoint(tt,.0)
        
        if c >= 3{
            SetHeroStr(u,GetHeroStr(u,false)+10,true)
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl",u,"origin"))
            c = 0
        }
        SaveInteger(H,i,0,c)
        
        u = null; tt = null
    }
    
    private void eee(){
        TriggerRegisterUnitEvent(trg,GetEnumUnit(),EVENT_UNIT_DAMAGED)
    }
    private bool mycond1(){
        return IsUnitType(GetEventDamageSource(),UNIT_TYPE_HERO) && GetEventDamage() > 0
    }
    private bool mycond(){
        return GetUnitTypeId(GetFilterUnit()) == 'h000'
    }
    private void init(){
        group g = CreateGroup()
        boolexpr b = Condition(function mycond)
        
        GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,b)
        ForGroup(g,function eee)
        DestroyBoolExpr(b); b = Condition(function mycond1)
        TriggerAddCondition(trg,b)
        TriggerAddAction(trg,function act)
        
        DestroyBoolExpr(b)
        GroupClear(g); DestroyGroup(g)
        trg = null; b = null; g = null
    }
}
ответ
зависит от твоих нужд
например, мне нужно хранить последние 5 секунд позиций нескольких юнитов, т.е. разбитые на участки по 0.25 секунд снимки хп/мп/координат каждого из них
это 5*4 = 20 значений каждого, итого 80
когда мы доходим до секунды 5.25, то надо сдвигать все предыдущие на единичку назад, и вставлять текущие данные на последний слот
это 79*4 операций чтения и 80*4 записей (считаю грубо, всё для примера)
когда это делается в хештбалице, нагрузка значительно выше выходит, чем если делать на массивах (хт перебирает ключи как ассоциативный массив, а обычный массив просто обращается к памяти с указанным адресом, в разы быстрее).
Но чтобы делать эту процедуру на массивах, тебе нужен индексатор этих самых юнитов, чтобы их уникальный ключ не превышал лимит массива. Это дополнительный код, который тебе нужно реализовать с нуля. Но после реализации система становится быстрее.
Была она до этого медленной? да. Влияло ли это на игру? Нет, это 100-200 микросекунд.
Опять же, когда у тебя есть пре-процессор типа vJASS + сниппеты типа Table , которые имитируют массив самостоятельно, они снимают с тебя часть обязанностей. Но из-за того, что они созданы для ОБЩЕГО случая, они все равно не дадут того выигрыша в скорости, который можешь ожидать.
Используй то, что тебе удобнее, и оптимизируй только когда это реально влияет на игру. habr.com/ru/post/550926
И не забывай, что дота стала популярной еще во времена, когда была написана почти целиком на ГУИ и нихера в ней не пахло даже оптимизацией.
ответ
Таймеры не могут создаваться при инициализации карты, так как действия инициализации проходят не тогда, когда проходит загрузка и запускается сама карта, а сразу как начинается загрузка.
ответ
period - 0.05, период обновления
cd - длительность, сколько должен заполнятся хп бар
это у меня был фрейм перезарядки, слева направо адаптируйте под себя
function StartFrameCD(cd, fh,period)
    local amount = period*100 / cd
    local full = 0

    TimerStart(CreateTimer(), period, true, function()
        full = full + amount
        BlzFrameSetValue(fh, full)
        if full >= 100 then
            DestroyTimer(GetExpiredTimer())
            full = 0
        end
    end)
end

Это работает железно, я так делаю каст бары из фреймов или эффектов, вот ещё пример

23

» WarCraft 3 / Помогите запустить карту

Похожие вопросы:

ответ
Если есть тимвиверные лаги, есть ещё миллион других программ для удалёнки, AnyDesk или Spleshtop (вроде платный, но это не проблема)
Но я делал по другому: по впн цеплялся домой на роутер, на домашнем компе на Win 10 pro создавал второго пользователя (в принципе можно и создавать и не патчить десятку под сервер), подключался через удалённый рабочий стол к домашнему компу и в принципе всё, vpn соедение на убунте хз где, но remmina для удалённого рабочего стола есть точно, ну или параллелс десктоп в режиме rdp.
Если ничего не понятно, то могу подробно расписать что и как я делал
Так же никто не отменял поставить варик на любой комп в рабочей сети (если есть доступ на такие пакости), хоть на компьютер бухглатера и в режиме второго пользователя сидеть по RDP на этом компе, WE вроде сильно не грузит =)
ответ
Вообщем перенастроил Jass New Gen Pack карта как то по другому сохранилась с проверками и всё наладилось)
ответ
BartSi, очень странно.
Нашёл проблему. В редакторе ландшафта нужно выбрать Camera Palette (там где юниты, декорации и прочее) выбрать первую строчку (камера без имени) и удалить. Тогда проблема решится. Сбросил триггеры и удалил камеру.
Ошибка из-за того, что у камеры почему-то пустое имя. Из-за этого её переменная оканчивается на _, что нельзя в JASS.

BartSi, каким конвертером 1.31 -> 1.26 пользовался?

Hodor, твой конвертер случайно не шаманит с камерами?
ответ
8gabriel8, ни разу не сталкивался с вылетами редактора при длительной работе. Как я считаю, Reforged переписал пути к WC3 в регистре, из-за чего старый редактор перестал работать, но это лишь догадка.

23

» WarCraft 3 / Вылет карты

Похожие вопросы:

ответ
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
ответ
nvc123, увы там дефолт ИИ, недаст особо управлять мобами.
Щяс скину пример из доты но более понятный, как заставить нейтралов ходить и атаковать.
Вот вам пример контроля нейтралами.
ответ
Проблема решена.Это было из-за модели. Углубляться в подробности не буду.
ответ
Вранье, 1.26 самый стабильный патч, на нём ничего не вылетает.
А когда вылет происходит? Я запустил в карту, она работает.

23

» WarCraft 3 / Триггер смены владельца здания.

Похожие вопросы:

ответ
Если игрок атакует шахту, которая ему не принадлежит и имеет запас здоровья 1000 или меньше, должна ли последняя перейти в его владение? Или может после перехода во владение шахта должна увеличивать свой запас здоровья, чтобы он стал больше 1000?
Так?
ответ
NazarPunk, каком "таком"?
Событие - Любой юнит получает урон
Условие -  (Тип Triggering Unit равно Х) И (Здоровье Triggering Unit - Полученный урон <= 0.)
Действия
Установить получаемый урон на 0.
Уставить владельца Triggering Unit: Владелец источника урона.
Установить здоровье для Triggering Unit на 100%.
ответ
Вы смотрели тут, тут и тут?
Там всё через gui
ответ
Далее, мне сделали способность в заказах, я перенес на карту и она работала при проверке. Когда я удалил героя проверки, то способность перестала работать, хотя там не указывается юнит. В чем причина — непонятно
Причина в твоих руках, которые решили поломать спелл)
Скрин с моего спелла

И отредаченный тобой

Ну и небольшой совет, если ты продолжишь лепить карту в таком духе, то рано или поздно действия с открытием вкладки переменных юнитов у тебя начнут дико виснуть, а большое кол-во блокираторов заставят карту компилиться пол часа

Но если это приближённый к идеальному размеру, тогда пофиг

абилку поправил, помимо этого ещё разрешенные цели не были указаны верно


С драгуном хз, я сбросил пару данных и всё заработало

вот карта

возможно вылет был из-за требований

23

» WarCraft 3 / Картостроение

Похожие вопросы:

ответ
удалять нельзя
чтобы закрыть выбери лучший ответ
ответ
наработка есть на форуме
в общем надо скрывать крышу когда герой заходит в дом
даже статья есть
ответ
Тест карты кампании не показывает нестандартных юнитов кампании. Нужно сохранять и запускать через игру вручную, если что.
ответ
Лучший учитель и путеводитель по картостроению


23

» WarCraft 3 / Улучшение

Похожие вопросы:

ответ
Ты добавлял кости? Или через "повышение урона (улучшение)"? Значение последнего у юнита помечено — это добавится "базовый урон".
ответ
ну дай фриз юниту просто
но это не только убор скорости, это убор вообще всего, это по сути превращение в овоща со слюнями изо рта до момента, пока ты не заанпауишь юнита

если не покатит, то устраивай клоунаду
ройся в стандартных абилках
можешь вот как с яйцом предложили, можешь безэффектный баш швырять в лицо ублюдку (хотя это тоже фриз будет тащемта), можешь спавнить даммика с пасосом (одержимость баньши) и заставлять кастовать его 999 секунд и прогонять даммика, когда тебе нужно, можешь руты кипера бросать: тоже безэффектные + без дамага
включай фантазию

хочется чтобы эта замена происходила не моментально, а через какое то время (на подобии обучения в зданиях),
Юзай однократный таймер (или же если таких юнитов будет очень много, то загони весь этот скот в группу отдельную и сделай пустышную абилку родную им с 10 ЛВЛами и, условно, каждую минуту каждому юниту из группы этой снижай лвл на 1 этой абилки-пустышки периодиком, а когда будет = 1, то морфи в нужного юнита), вейты - зло. Но минус в том, что если это мелкая темка, то на неё целый лишний триггер будет.
ответ
Сам процесс как раз важен. Я его использую как таймер, мол когда улучшение сделается, то произойдет какое-то действие и т.д.
Сделай это просто таймером и окном таймера.
ответ
Проблема решилась. Для новичков - Игрок - Установить текущий уровень исследования
ответ
Ладно, раз менее костыльного решения проблемы нет, сделал дополнительное исследование (скрытое), которое триггерно изучается при изучении 3-го левела оригинального улучшения.

23

» WarCraft 3 / вопрос по карте

Похожие вопросы:

ответ
Вам сюда, господин хороший. Там есть ответы, практически, на все ваши вопросы.
ответ
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
ответ
~8gabriel8:
  1. Создать дамми-шахтёров.
  2. Триггер:
Событие: Время - Elapsed 600 sec.
Условие:
Действие: Группа игроков - Pick up (All players) and do actions
Отряд - Pick up (Units of (Picked player) and ((Matching unit) не равно Здание равно Да)) and do actions
Боевая единица - Move (Picked unit) instantly to (куда надо)

23

» WarCraft 3 / Как сделать так когда герой подбирал предмет...

Похожие вопросы:

ответ
~8gabriel8:
К сожалению, я нашёл лишь условие "количество предметов у юнита" о типе предметов, там нет и речи
Верно, мой косяк. Надо циклом перебирать предметы. Вот карта с триггером и скрин:

23

» WarCraft 3 / Как прикрепить область к юниту?

Похожие вопросы:

ответ
Блокираторы пути. Для создания космоса и безды можно использовать специальный скайбокс + специальный набор декора + прозрачный тайл.
Пользуйся поиском